unit EstadoGrid;

interface
uses
  Estado;

type
  TPropriedadeGrid = (pgLimpo, pgOuro, pgBuraco, pgVento, pgDesconhecido, pgMuro);

  TEstadoGrid = class(TEstado)
    private
      FX,
      FY : Integer;

      FPropriedade : TPropriedadeGrid;

      FDescricao  : String;

      function StringToGridProperty (s : String) : TPropriedadeGrid;

    public
      constructor Create; overload;
      constructor Create (X, Y : Integer; Propriedade : String); overload;

      class function GridPropertyToString (pg : TPropriedadeGrid) : string;

      property X : Integer read FX write FX;
      property Y : Integer read FY write FY;

      property Propriedade : TPropriedadeGrid read FPropriedade write FPropriedade;
      property Descricao : String read FDescricao write FDescricao;

  end;

implementation

uses SysUtils;



{ TEstadoGrid }

constructor TEstadoGrid.Create;
begin
  FX := 0;
  FY := 0;

  FPropriedade := TPropriedadeGrid (Random(2));

end;

constructor TEstadoGrid.Create(X, Y : Integer; Propriedade: String);
begin
  FX := X;
  FY := Y;

  FPropriedade := StringToGridProperty(Propriedade);
  FDescricao   := IntToStr(X) + ',' + IntToStr(Y);
end;

class function TEstadoGrid.GridPropertyToString (pg : TPropriedadeGrid): string;
begin
  case pg of
    pgLimpo: Result := '_';
    pgOuro : Result := '*';
    pgBuraco : Result := '0';
    pgVento  : Result := '~';
    pgDesconhecido : Result := '?';
    pgMuro          : Result := 'W';
  end;

end;

function TEstadoGrid.StringToGridProperty(s: String): TPropriedadeGrid;
begin

  if s = '*' then
    Result := pgOuro
  else  if s = '0' then
    Result := pgBuraco
  else if s = '-' then
    Result := pgVento
  else
    Result := pgLimpo;

end;

end.
